home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / pxbud.zip / PDXTBL.CPP < prev    next >
C/C++ Source or Header  |  1991-05-17  |  6KB  |  235 lines

  1. /*┌───────────────────────────────────────────────────────────────────────┐
  2.   │                                                                       │
  3.   │   Module:  PDXTBL.CPP                                                 │
  4.   │   Author:  Rick Kligman                                               │
  5.   │   Purpose: Code for Base Class table which handles Paradox Engine     │
  6.   │             Database stuff                                            │
  7.   │   Last Modified: 05-17-91 00:34am                                     │
  8.   │                                                                       │
  9.   │   Copyright 1991 Rick Kligman                                         │
  10.   │   This code may be freely used and distributed in commercial apps     │
  11.   │   provided some mention of PXBuddy++ is made in the documentation.    │
  12.   │                                                                       │
  13.   │   Version 1.00                                                        │
  14.   └───────────────────────────────────────────────────────────────────────┘ */
  15.  
  16. #include "pdxtbl.h"
  17.  
  18. //    ╓───────────────────────────────────────────────────────────────╖
  19. //    ║                 Constructor for pxtable class                 ║
  20. //    ╚═══════════════════════════════════════════════════════════════╝
  21.  
  22. pxtable::pxtable()
  23. {
  24.   first_open      = 1;        // this will be first time table is opened
  25.   tbl_open        = 0;        // table is not open
  26.   blanks_as_zeros = TRUE;     // write blanks as zeros
  27. }
  28.  
  29. //    ╓───────────────────────────────────────────────────────────────╖
  30. //    ║                 Destructor for pxtable class                  ║
  31. //    ╚═══════════════════════════════════════════════════════════════╝
  32.  
  33. pxtable::~pxtable()
  34. {
  35.   if ( ! first_open )
  36.       delete fldptr;
  37.   if ( tbl_open )
  38.       PXTblClose(th);
  39. }
  40.  
  41. //    ╓───────────────────────────────────────────────────────────────╖
  42. //    ║                         Open a Table                          ║
  43. //    ╚═══════════════════════════════════════════════════════════════╝
  44.  
  45. int pxtable::open(char *tablename, FIELDHANDLE fh)
  46. {
  47.   int   err;
  48.  
  49.   if ( *tablename != NULL) {
  50.       strcpy(tblname, tablename);
  51.       if (! first_open)
  52.           delete fldptr;
  53.       first_open = 1;
  54.   }
  55.  
  56.   err = PXTblOpen(tblname, &th, fh, 0);
  57.   CKERR;
  58.   err = PXRecBufOpen(th, &rh);
  59.   if ( ! err ) {
  60.       err = PXRecBufEmpty(rh);
  61.       if ( ! err )
  62.           if ( first_open ) {
  63.               err = PXRecNFlds(th, &numflds);
  64.               if ( ! err ) {
  65.                   fldptr = new absfld * [numflds + 1];
  66.                   first_open = 0;
  67.                   init_flds();
  68.                   PXKeyNFlds(th, &keyed);     // determine if table is keyed
  69.               }
  70.           }
  71.   }
  72.  
  73.   if ( err )
  74.       PXTblClose(th);
  75.   else
  76.       tbl_open = 1;         // table is now open
  77.  
  78.   return err;       // will be PXSUCCESS if everything is OK
  79. }
  80.  
  81. //    ╓───────────────────────────────────────────────────────────────╖
  82. //    ║                        Close a Table                          ║
  83. //    ╚═══════════════════════════════════════════════════════════════╝
  84.  
  85. int pxtable::close()
  86. {
  87.   int   err;
  88.  
  89.   err = PXRecBufClose(rh);
  90.   CKERR;
  91.  
  92.   err = PXTblClose(th);
  93.  
  94.   if ( ! err )
  95.       tbl_open = 0;         // table is now closed
  96.  
  97.   return err;
  98. }
  99.  
  100. //    ╓───────────────────────────────────────────────────────────────╖
  101. //    ║       Read the record and then ALL fields in a Table          ║
  102. //    ╚═══════════════════════════════════════════════════════════════╝
  103.  
  104. int pxtable::read_rec()
  105. {
  106.   int     err;
  107.  
  108.   err = recget();
  109.   CKERR;
  110.  
  111.   err = read_flds();
  112.  
  113.   return err;
  114. }
  115.  
  116. //    ╓───────────────────────────────────────────────────────────────╖
  117. //    ║                   Read ALL fields in a Table                  ║
  118. //    ╚═══════════════════════════════════════════════════════════════╝
  119.  
  120. int pxtable::read_flds()
  121. {
  122.   int     err;
  123.  
  124.   for (int i = 0; fldptr [i] != NULL; i++) {
  125.       err = fldptr [i]->get();
  126.       CKERR;
  127.   }
  128.  
  129.   return (PXSUCCESS);
  130. }
  131.  
  132. //    ╓───────────────────────────────────────────────────────────────╖
  133. //    ║        Write ALL fields in a Table and then the record        ║
  134. //    ╚═══════════════════════════════════════════════════════════════╝
  135.  
  136. int pxtable::put_recupdate()
  137. {
  138.   int     err;
  139.  
  140.   err = put_flds();
  141.   CKERR;
  142.  
  143.   err = recupdate();
  144.  
  145.   return err;
  146. }
  147.  
  148. //    ╓───────────────────────────────────────────────────────────────╖
  149. //    ║        Write ALL fields in a Table and then the record        ║
  150. //    ╚═══════════════════════════════════════════════════════════════╝
  151.  
  152. int pxtable::put_recappend()
  153. {
  154.   int     err;
  155.  
  156.   err = put_flds();
  157.   CKERR;
  158.  
  159.   err = recappend();
  160.  
  161.   return err;
  162. }
  163.  
  164. //    ╓───────────────────────────────────────────────────────────────╖
  165. //    ║        Write ALL fields in a Table and then the record        ║
  166. //    ╚═══════════════════════════════════════════════════════════════╝
  167.  
  168. int pxtable::put_recinsert()
  169. {
  170.   int     err;
  171.  
  172.   err = put_flds();
  173.   CKERR;
  174.  
  175.   err = recinsert();
  176.  
  177.   return err;
  178. }
  179.  
  180. //    ╓───────────────────────────────────────────────────────────────╖
  181. //    ║                  Write ALL fields in a Table                  ║
  182. //    ╚═══════════════════════════════════════════════════════════════╝
  183.  
  184. int pxtable::put_flds()
  185. {
  186.   int     err;
  187.  
  188.   for (int i = 0; fldptr [i] != NULL; i++) {
  189.       err = fldptr [i]->put();
  190.       CKERR;
  191.   }
  192.  
  193.   return (PXSUCCESS);
  194. }
  195.  
  196. //    ╓───────────────────────────────────────────────────────────────╖
  197. //    ║                 Get Next Record in the Table                  ║
  198. //    ╚═══════════════════════════════════════════════════════════════╝
  199.  
  200. int pxtable::recnext()
  201. {
  202.   int   err;
  203.  
  204.   err = PXRecNext(th);
  205.   if ( err == PXERR_ENDOFTABLE ) {
  206.       err = PXSUCCESS;
  207.       tblmarker = TRUE;
  208.   }
  209.   else
  210.       tblmarker = FALSE;
  211.  
  212.   return err;
  213. }
  214.  
  215. //    ╓───────────────────────────────────────────────────────────────╖
  216. //    ║                 Get Prev Record in the Table                  ║
  217. //    ╚═══════════════════════════════════════════════════════════════╝
  218.  
  219.  
  220. int pxtable::recprev()
  221. {
  222.   int   err;
  223.  
  224.   err = PXRecPrev(th);
  225.   if ( err == PXERR_STARTOFTABLE ) {
  226.       err = PXSUCCESS;
  227.       tblmarker = TRUE;
  228.   }
  229.   else
  230.       tblmarker = FALSE;
  231.  
  232.   return err;
  233. }
  234.  
  235.